import axios from "axios"
import router from '@/router'
import { useUserStore } from '@/stores'
import { ElMessage } from 'element-plus'


// 创建一个新的axios实例
const baseURL = 'https://pcapi-xiaotuxian-front-devtest.itheima.net'
const instance = axios.create({
    // TODO 1. 基础地址，超时时间
    baseURL,
    timeout: 10000
})

// 创建请求拦截器
instance.interceptors.request.use(config => {
    // TODO 2. 携带token
    const store = useUserStore()
    if (store.profile.token && config.headers) {
        config.headers['Authorization'] = `Bearer ${store.profile.token}`
    }
    return config

}, err => {
    return Promise.reject(err)
})

// 创建响应拦截器
instance.interceptors.response.use(res => {
    // TODO 3. 处理业务失败
    if (res.data.code !== '1') {
        ElMessage({
            type: 'error',
            message: res.data.msg || '业务失败'
        })
        return Promise.reject(res.data)
    }
    // TODO 4. 摘取核心响应数据
    return res.data;

}, err => {
    // TODO 5. 处理401错误
    if (err.response && err.response.status === 401) {
        // 清空用户信息
        const store = useUserStore()
        store.delUser()

        // 跳转登陆，带上接口失效所在页面的地址，登陆完成后跳回
        router.push({
            path: '/login',
            query: {
                returnUrl: router.currentRoute.value.fullPath
            }
        })
    }

    return Promise.reject(err)
})

// 请求工具函数
const request = (url, method, submitData) => {
    return instance.request({
        url,
        method,
        [method.toUpperCase() === 'GET' ? 'params' : 'data']: submitData
    })
}

// 导出请求对象
export { baseURL, instance, request }